﻿Imports System.Data.SqlClient
Imports System.IO
Imports Sendkey = System.Windows.Forms.SendKeys
'Imports System.Threading

Public Class FrmTipos_Moneda

#Region "Variables"

    Private cGeneral As New clsGeneral
    Private cTipos_Moneda As New clsTipos_Moneda

    Dim dtTipos_Moneda As New DataTable()
    Dim NuevaFila As DataRow

    Dim li_Respuesta As Int16

#End Region

#Region "Eventos"

    Private Sub FrmTipos_Moneda_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        gs_Pantalla = Me.Name
        dtTipos_Moneda.Clear()
        dtTipos_Moneda = cTipos_Moneda.ObtenerTipos_Moneda("Numerico")
        If dtTipos_Moneda.Rows.Count > 0 Then
            Despliega()
        Else
            Limpiar()
        End If
    End Sub

    Private Sub Nuevo_Click(sender As Object, e As EventArgs) Handles Nuevo.Click
        Limpiar()
        Txt_Descripcion.Focus()
    End Sub

    Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click
        If Txt_Descripcion.Text.Trim = "" Then
            MessageBox.Show("Error - Descripcion no puede quedar vacía")
            Txt_Descripcion.Focus()
        Else
            ' carga valores del objeto
            If Txt_Codigo.Text.Trim = "" Then
                cTipos_Moneda.Codigo = -1  ' para facilitar posicionamiento en DataTable luego de Incluir en cTipos_Moneda.Guardar()
            Else
                cTipos_Moneda.Codigo = CType(Txt_Codigo.Text, Integer)
            End If
            cTipos_Moneda.Nombre = Txt_Descripcion.Text.Trim
            ' carga valores para Auditoría
            cTipos_Moneda.Aplicacion = gs_Sistema_Nombre
            cTipos_Moneda.Pantalla = gs_Pantalla
            cTipos_Moneda.Usuario = gs_Usuario
            cTipos_Moneda.Maquina = gs_Maquina
            cTipos_Moneda.Guardar()    ' cTipos_Moneda.EstadoGuardar contiene el Id insertado o modificado
            If cTipos_Moneda.EstadoGuardar = -1 Then   ' -1 = Error
                ' cTipos_Moneda.Guardar() despliega el mensaje de error
            Else
                ' Determina si los valores a almacenar ya existen o no
                If cTipos_Moneda.Codigo = -1 Then      ' -1 = Incluir
                    cTipos_Moneda.Codigo = cTipos_Moneda.EstadoGuardar
                    dtTipos_Moneda.Clear()
                    dtTipos_Moneda = cTipos_Moneda.ObtenerTipos_Moneda("Numerico")
                    ' el último es el que se acaba de ingresar así que lo posiciono en el DataTable
                    BindingContext(dtTipos_Moneda).Position = BindingContext(dtTipos_Moneda).Count - 1
                    Despliega()
                Else
                    ' modifica los datos actuales del DataTable
                    NuevaFila = dtTipos_Moneda.Select("Tipo_Moneda=" & cTipos_Moneda.Codigo)(0)
                    NuevaFila.Item("Tipo_Moneda") = cTipos_Moneda.Codigo
                    NuevaFila.Item("Nombre") = cTipos_Moneda.Nombre
                    ' NO hace falta refrescar el formulario con Despliega()
                End If
            End If
        End If
    End Sub

    Private Sub Buscar_Click(sender As Object, e As EventArgs) Handles Buscar.Click
        FrmConsulta.Tag = "Tipos_Moneda"
        FrmConsulta.dt = dtTipos_Moneda
        FrmConsulta.ShowDialog()
        Application.DoEvents()
        If gi_Codigo_1 <> -1 Then ' posiciona el registro seleccionado
            For Fila As Integer = 0 To dtTipos_Moneda.Rows.Count - 1
                If dtTipos_Moneda.Rows(Fila).Item(0) = gi_Codigo_1 Then
                    BindingContext(dtTipos_Moneda).Position = Fila
                    Exit For
                End If
            Next
            Despliega()
        End If
    End Sub

    Private Sub Imprimir_Click(sender As Object, e As EventArgs) Handles Imprimir.Click
        'Dim dt_RPT As New DataTable("Resultados")
        'Dim NuevaFila As DataRow
        'Dim CrReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument

        If dtTipos_Moneda.Rows.Count > 0 Then
            Try
                '    dt_RPT.Columns.Add("Codigo")
                '    dt_RPT.Columns.Add("Descripcion")
                '    dt_RPT.Columns.Add("Titulo_Reporte")
                '    For Fila As Integer = 0 To ds.Tables("Resultados").Rows.Count - 1
                '        NuevaFila = dt_RPT.NewRow()
                '        NuevaFila("Codigo") = ds.Tables("Resultados").Rows(Fila).Item("ID_Contexto")
                '        NuevaFila("Descripcion") = ds.Tables("Resultados").Rows(Fila).Item("Nom_Contexto")
                '        NuevaFila("Titulo_Reporte") = "Reporte de Contextos"
                '        dt_RPT.Rows.Add(NuevaFila)
                '    Next

                '    CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument()

                '    CrReport.Load(gs_RutaReportes & "RptCatalogos.rpt")

                '    CrReport.SetDataSource(dt_RPT)
                '    Frm_RPT_Visor.CrystalReportViewer1.ReportSource = CrReport
                '    Frm_RPT_Visor.Show()

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        Else
            MessageBox.Show("No hay datos para imprimir")
        End If
    End Sub

    Private Sub Excel_Click(sender As Object, e As EventArgs) Handles Excel.Click
        If dtTipos_Moneda.Rows.Count > 0 Then
            cGeneral.DataTable_a_Excel(dtTipos_Moneda, BarraProgreso)
        Else
            MessageBox.Show("No hay datos para exportar")
        End If
    End Sub

    ' Cada formulario tiene un objeto BindingContext que mantiene el rastro de todos los recursos 
    ' de datos asociados con la forma. 
    ' Para referirse a una tabla utilice:
    '       BindingContext(nombre_DataTable)
    '
    ' Para referirse a una tabla dentro del Dataset utilice:
    '       BindingContext(nombre_Dataset, "NombreTabla")
    '
    ' El objeto BindingContext tiene una propiedad Position que indica el registro actual 
    ' y una propiedad Count que indica el Total de registros en el Dataset. El primer registro tiene 
    ' la posición 0, por lo que el último registro tiene la posición Count - 1. 

    Private Sub Primero_Click(sender As Object, e As EventArgs) Handles Primero.Click
        If BindingContext(dtTipos_Moneda).Count > 0 Then
            BindingContext(dtTipos_Moneda).Position = 0
            Despliega()
        Else
            Limpiar()
        End If
    End Sub

    Private Sub Anterior_Click(sender As Object, e As EventArgs) Handles Anterior.Click
        If BindingContext(dtTipos_Moneda).Count > 0 Then
            If BindingContext(dtTipos_Moneda).Position > 0 Then
                BindingContext(dtTipos_Moneda).Position -= 1
                Despliega()
            End If
        Else
            Limpiar()
        End If
    End Sub

    Private Sub Siguiente_Click(sender As Object, e As EventArgs) Handles Siguiente.Click
        If BindingContext(dtTipos_Moneda).Count > 0 Then
            If BindingContext(dtTipos_Moneda).Position < BindingContext(dtTipos_Moneda).Count - 1 Then
                BindingContext(dtTipos_Moneda).Position += 1
                Despliega()
            End If
        Else
            Limpiar()
        End If
    End Sub

    Private Sub Ultimo_Click(sender As Object, e As EventArgs) Handles Ultimo.Click
        If BindingContext(dtTipos_Moneda).Count > 0 Then
            BindingContext(dtTipos_Moneda).Position = BindingContext(dtTipos_Moneda).Count - 1
            Despliega()
        Else
            Limpiar()
        End If
    End Sub

    Private Sub Borrar_Click(sender As Object, e As EventArgs) Handles Borrar.Click
        If Txt_Codigo.Text.Trim = "" Then
            MessageBox.Show("Debe haber definido un código para poder borrarlo.")
            Txt_Codigo.Focus()
        Else
            li_Respuesta = MessageBox.Show("¿Desea BORRAR el registro de Tipo_Moneda = " & Txt_Codigo.Text & "?", "", MessageBoxButtons.YesNo)
            If li_Respuesta = vbYes Then
                ' carga valores del objeto
                cTipos_Moneda.Codigo = CType(Txt_Codigo.Text, Integer)
                ' carga valores para Auditoría
                cTipos_Moneda.Aplicacion = gs_Sistema_Nombre
                cTipos_Moneda.Pantalla = gs_Pantalla
                cTipos_Moneda.Usuario = gs_Usuario
                cTipos_Moneda.Maquina = gs_Maquina
                cTipos_Moneda.Borrar()    ' cTipos_Moneda.EstadoGuardar contiene el Id insertado o modificado
                If cTipos_Moneda.EstadoGuardar = -1 Then   ' -1 = Error
                    ' cTipos_Moneda.Borrar() despliega el mensaje de error
                Else
                    dtTipos_Moneda.Rows.RemoveAt(BindingContext(dtTipos_Moneda).Position)
                    If dtTipos_Moneda.Rows.Count > 0 Then
                        ' se posiciona en el último registro
                        BindingContext(dtTipos_Moneda).Position = BindingContext(dtTipos_Moneda).Count - 1
                        Despliega()
                    Else
                        Limpiar()
                    End If
                End If
            End If
        End If
    End Sub

    Private Sub Txt_Codigo_KeyPress(sender As Object, e As KeyPressEventArgs)
        If Asc(e.KeyChar) = Keys.Return Then
            Sendkey.Send("{tab}")
        ElseIf Asc(e.KeyChar) <> 8 Then
            If InStr("0123456789", Char.ToUpper(e.KeyChar)) = 0 Then
                MessageBox.Show("Caracter inválido, use dígitos")
                e.Handled = True
            End If
        End If
    End Sub

    Private Sub Txt_Codigo_Leave(sender As Object, e As EventArgs)
        If Trim(Txt_Codigo.Text) <> "" Then
            Dim li_Posicion As Integer = -1

            cTipos_Moneda.Codigo = CType(Txt_Codigo.Text, Integer)
            For i As Integer = 0 To dtTipos_Moneda.Rows.Count - 1
                If dtTipos_Moneda.Rows(i).Item("Tipo_Moneda") = cTipos_Moneda.Codigo Then
                    li_Posicion = i
                    Exit For
                End If
            Next
            If li_Posicion = -1 Then
                MessageBox.Show("Tipo_Moneda no registrada")
                Limpiar()
            Else
                BindingContext(dtTipos_Moneda).Position = li_Posicion
                Despliega()
            End If
        End If
    End Sub

    Private Sub Txt_Descripcion_KeyPress(sender As Object, e As KeyPressEventArgs)
        If Asc(e.KeyChar) = Keys.Return Then
            Sendkey.Send("{tab}")
        ElseIf Asc(e.KeyChar) <> 8 Then
            If InStr("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", Char.ToUpper(e.KeyChar)) = 0 Then
                MessageBox.Show("Caracter inválido, use letras")
                e.Handled = True
            End If
        End If
    End Sub

    Private Sub Txt_Descripcion_Leave(sender As Object, e As EventArgs)
        'Txt_Descripcion.Text = Txt_Descripcion.Text.ToUpper
    End Sub

    Private Sub Txt_Descripcion_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs)
        If Txt_Descripcion.Text.Trim = "" Then
            MessageBox.Show("Error - Descripcion no puede quedar vacía")
            e.Cancel = True
        End If
    End Sub

    Private Sub BarraProgreso_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Lbl_Progreso.Visible = BarraProgreso.Visible
        Application.DoEvents()
    End Sub

#End Region

#Region "Metodos"

    Sub Despliega()
        NuevaFila = dtTipos_Moneda.Rows(BindingContext(dtTipos_Moneda).Position)
        Txt_Codigo.Text = NuevaFila.Item("Tipo_Moneda")
        Txt_Descripcion.Text = NuevaFila.Item("Nombre")
    End Sub

    Sub Limpiar()
        Txt_Codigo.Text = ""
        Txt_Descripcion.Text = ""
    End Sub

#End Region

End Class